﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using DA_OOMModel;
using System.Data;
using DA_OOMNHibernateDAL;
using DA_OOMDALFactory;
using DA_OOMModelIDAL;
using System.Reflection;
using System.Collections;

namespace DaCredito
{
    public partial class CadastroSacado :  WebPageGridForm
    {

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);


            if (!ScriptManager1.IsInAsyncPostBack)
            {
                this.CarregaEstados();
            }

            //base.Page_Load(sender, e);


            if (!ScriptManager1.IsInAsyncPostBack)
            {
                this.CarregaCidades();
            }
            
        }
        protected override void PrePageLoad()
        {

            base.PrePageLoad();

            this.ioTipoEntidade = typeof(Pessoa);
            this.ioTipoPKEntidade = typeof(PessoaPK);
            this.ioListaTipoEntidadeSecundaria = new Type[4] { typeof(PessoaJuridica), typeof(Sacado), typeof(Endereco), typeof(Telefone) };
            this.isNomeAtributos = new string[2] { "PesIdPessoa", "PesNmPessoa" };
            
        }


        protected void Page_Load(object sender, EventArgs e)
        {

          /*  this.ioTipoEntidade = typeof(Cliente);
            this.ioListaTipoEntidadeSecundaria = new Type[3] { typeof(Usuario), typeof(Endereco), typeof(Telefone) };
            this.isNomeAtributos = new string[2] { "CliIdCliente", "CliNmRazaoSocial" };
            */
            //base.Page_Load(sender, e);

            if (!ScriptManager1.IsInAsyncPostBack)
            {
                this.CarregaEstados();
            }

            //base.Page_Load(sender, e);


            if (!ScriptManager1.IsInAsyncPostBack)
            {
                this.CarregaCidades();
            }
            
            
        }
        protected override void CarregaEntidadesPagina()
        {

            Pessoa loPessoa = (Pessoa)ioInstanciaEntidade;


            if (loPessoa.PessoaJuridica.Count > 0)
            {
                IEnumerator ddd = loPessoa.PessoaJuridica.GetEnumerator();
                ddd.MoveNext();
                this.CarregaEntidadePagina(typeof(PessoaJuridica), ddd.Current);
            }

            if (loPessoa.Sacado.Count > 0)
            {
                IEnumerator ddd = loPessoa.Sacado.GetEnumerator();
                ddd.MoveNext();

                Sacado loSacado = (Sacado)ddd.Current;

                this.CarregaEntidadePagina(typeof(Sacado), loSacado);

            }


            List<Endereco> loListaEnderecos = ControladorDaCredito.GetInstance().RecuperaListaEndereco((Pessoa)ioInstanciaEntidade);
            if (loListaEnderecos.Count > 0)
            {
                this.CarregaEntidadePagina(typeof(Endereco), loListaEnderecos[0]);
            }

            List<Telefone> loListaTelefones = ControladorDaCredito.GetInstance().RecuperaListaTelefone((Pessoa)ioInstanciaEntidade);
            if (loListaTelefones.Count > 0)
            {
                this.CarregaEntidadePagina(typeof(Telefone), loListaTelefones[0]);
            }


        }

        protected void CarregaEstados()
        {
            List<Estado> loListaEstado = ControladorDaCredito.GetInstance().RecuperaListaEstado();

            foreach (Estado loEstado in loListaEstado)
            {
                Column_Estado.Items.Add(new ListItem(loEstado.EstNmEstado, loEstado.EstIdEstado.ToString()));
            }
        }


        protected void CadastrarSacadoButton_Click(object sender, EventArgs e)
        {

            this.OnSave();
            return;
             }
        
        protected override bool OnUpdate()
        {

            string lsEmail;
            string lsEnderecoLogradouro;
            string lsEnderecoComplemento;
            string lsEnderecoNumero;
            string lsEnderecoNumeroCep;
            string lsEnderecoNomeBairro;
            int liIdCidade;
            int liIdEstado;
            int liIdSacado;
            int liIdEndereco;
            int liIdTelefone;
            
            lsEnderecoLogradouro = Column_EndNmLogradouro.Text;
            lsEnderecoComplemento = Column_EndDsComplemento.Text;
            lsEnderecoNumero = "";
            lsEnderecoNumeroCep = "";
            lsEnderecoNomeBairro = "";

            liIdCidade = Convert.ToInt32(Column_Cidade.SelectedValue);
            liIdEstado = Convert.ToInt32(Column_Estado.SelectedValue);
            liIdSacado = Column_SacIdSacado.Value == "" ? 0 : Convert.ToInt32(Column_SacIdSacado.Value);
            liIdEndereco = Column_EndIdEndereco.Value == "" ? 0 : Convert.ToInt32(Column_EndIdEndereco.Value);
            liIdTelefone = Column_TelIdTelefone.Value == "" ? 0 : Convert.ToInt32(Column_TelIdTelefone.Value);
         

            Cidade loCidade = new Cidade();
            loCidade.CidadePK = new CidadePK(liIdCidade);

            Estado loEstado = new Estado();
            loEstado.EstadoPK = new EstadoPK(liIdEstado);

            // ---------------------------------
            // Cadastro da Pessoa
            // ---------------------------------
            int liIdPessoa = Column_SacIdSacado.Value == "" ? 0 : Convert.ToInt32(Column_SacIdSacado.Value);

            IPessoaDAL loPessoaDAO = ConcreteDALFactory.CreatePessoaDAL();

            Pessoa loPessoa = loPessoaDAO.Load(new PessoaPK(liIdPessoa));
            if (loPessoa == null)
                loPessoa = new Pessoa();

            loPessoa.PesNmPessoa = Column_PesNmPessoa.Text;
            loPessoa.PesNuCpfCnpj = Column_PesNuCpfCnpj.value;
            loPessoa.PesDtCadastro = DateTime.Today;

            // ---------------------------------
            // Cadastro da Pessoa Juridica
            // ---------------------------------
            int liIdPessoaJuridica = Column_SacIdSacado.Value == "" ? 0 : Convert.ToInt32(Column_SacIdSacado.Value);

            IPessoaJuridicaDAL loPessoaJuridicaDAO = ConcreteDALFactory.CreatePessoaJuridicaDAL();

            PessoaJuridica loPessoaJuridica = loPessoaJuridicaDAO.Load(new PessoaJuridicaPK(liIdPessoaJuridica));
            if (loPessoaJuridica == null)
                loPessoaJuridica = new PessoaJuridica();

            loPessoaJuridica.PejNmRazaoSocial = Column_PejNmRazaoSocial.Text;
            loPessoaJuridica.PejNuInscricaoEstadual = Column_PejNuInscricaoEstadual.Text;
            loPessoaJuridica.PejNuInscricaoMunicipal = Column_PejNuInscricaoMunicipal.Text;
            loPessoaJuridica.Pessoa = loPessoa;

            // ---------------------------------
            // Cadastro do Sacado
            // ---------------------------------
            ISacadoDAL loSacadoDAO = ConcreteDALFactory.CreateSacadoDAL();

            Sacado loSacado = loSacadoDAO.Load(new SacadoPK(liIdSacado));
            if (loSacado == null)
                loSacado = new Sacado();

            loSacado.Pessoa = loPessoa;

            // ---------------------------------
            // Cadastro do Endereço do cliente
            // ---------------------------------
            IEnderecoDAL loEnderecoDAO = ConcreteDALFactory.CreateEnderecoDAL();

            Endereco loEndereco = loEnderecoDAO.Load(new EnderecoPK(liIdEndereco));
            if (loEndereco == null)
                loEndereco = new Endereco();

            loEndereco.EndNmLogradouro = lsEnderecoLogradouro;
            loEndereco.EndNuCep = lsEnderecoNumeroCep;
            loEndereco.EndNmBairro = lsEnderecoNomeBairro;
            loEndereco.EndNuImovel = lsEnderecoNumero;
            loEndereco.EndDsComplemento = lsEnderecoComplemento;
            loEndereco.Pessoa = loPessoa;
            loEndereco.Cidade = loCidade;
            loEndereco.Estado = loEstado;

            // ---------------------------------
            // Cadastro do Telefone do cliente
            // ---------------------------------
            ITelefoneDAL loTelefoneDAO = ConcreteDALFactory.CreateTelefoneDAL();

            Telefone loTelefone = loTelefoneDAO.Load(new TelefonePK(liIdTelefone));
            if (loTelefone == null)
                loTelefone = new Telefone();

            loTelefone.TelCdDdd = Column_TelCdDdd.Text;
            loTelefone.TelNuTelefone = Column_TelNuTelefone.Text;
            loTelefone.Pessoa = loPessoa;

            ControladorDaCredito.GetInstance().CadastrarSacado(loPessoa, loPessoaJuridica, loSacado, loEndereco, loTelefone);
           
        
            return true;
        }
    
        protected void Column_Estado_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.CarregaCidades();
        }

        private void CarregaCidades()
        {
            int liIDEstado = Convert.ToInt32(Column_Estado.Items[Column_Estado.SelectedIndex].Value);

            EstadoPK loEstadoPK = new EstadoPK(liIDEstado);

            List<Cidade> loListaCidade = ControladorDaCredito.GetInstance().RecuperaListaCidade(loEstadoPK);

            Column_Cidade.Items.Clear();
            foreach (Cidade loCidade in loListaCidade)
            {
                Column_Cidade.Items.Add(new ListItem(loCidade.CidNmCidade, loCidade.CidIdCidade.ToString()));
            }

        }
        protected override IList GetListaEntidade(object aoEntidadeDAL)
        {


            ISacadoDAL loSacadoDAO = ConcreteDALFactory.CreateSacadoDAL();
            IList<Sacado> loListaSacado = loSacadoDAO.GetSacadoList();
            List<Pessoa> loListaPessoa = new List<Pessoa>();
            foreach (Sacado loSacado in loListaSacado)
            {
                loListaPessoa.Add(loSacado.Pessoa);
            }
            return loListaPessoa;
        }
       


    }
}
